import 'package:interview/utils/logger.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:synchronized/synchronized.dart';
/* 
_lock.synchronized 的核心功能是确保同一时刻只允许一个任务进入关键代码区。它的主要作用包括：
串行化任务：
- 在锁的保护下，无论有多少任务尝试进入，只会有一个任务被允许执行。其他任务会被挂起，直到锁被释放。
- 避免状态冲突：
- 通过串行化，可以确保初始化逻辑的状态始终一致。多个任务进入时，只会执行一次核心逻辑。
防止线程堵塞：
- 不同于传统的线程锁（如 Mutex），synchronized 会挂起任务，而不会一直占用线程资源。
- 当任务被挂起时，线程可以处理其他操作，避免整个应用程序被锁死。
（初始化 或者 统计点赞、数量、计算等）
*/
class StartSharedPreferenceHelper {
  static const String _stateKey = "stateKey";
  static final Lock _lock = Lock(); // 用于并发保护

  static Future <void> markAppInitialized() async {
    await _lock.synchronized(() async {  // 处理用户频繁重启初始化 造成线程堵塞情况
      try {
        final prefs = await SharedPreferences.getInstance();
        if (!(prefs.getBool(_stateKey) ?? false)){
          await prefs.setBool(_stateKey, true);
          Logger.info("初始化 AppState 成功" , tag: "AppState");
        }
      } catch (e) {
        Logger.error("初始化 AppState 错误: $e" , tag: "AppState");
      }
    });

    
  }

  static Future <bool> isAppInitialized() async {
    try {
      final prefs = await SharedPreferences.getInstance();
      return prefs.getBool(_stateKey) ?? false;
    } catch (e) {
      Logger.error("获取 AppState 错误: $e" , tag: "AppState");
    }
    return false;
  }
}